From 7601bca7587dd29bde3d1554e644a10ae6dafc18 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ant=C3=B3nio=20Fernandes?= Date: Sat, 24 Nov 2018 01:49:43 +0000 Subject: [PATCH] placesview: List only available protocols as available We display a list of supported protocols in the server_addresses_popover. However, this curated list contains protocols which may or may not be available, depending on the respective gvfs backend being installed. So, populate the list only with protocols which are available. https://gitlab.gnome.org/GNOME/gtk/issues/1476 --- gtk/gtkplacesview.c | 52 +++++++++++++++++ gtk/ui/gtkplacesview.ui | 122 +--------------------------------------- 2 files changed, 53 insertions(+), 121 deletions(-) diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c index be0a84ab15..88975e6412 100644 --- a/gtk/gtkplacesview.c +++ b/gtk/gtkplacesview.c @@ -74,6 +74,7 @@ struct _GtkPlacesViewPrivate GtkWidget *recent_servers_stack; GtkWidget *stack; GtkWidget *server_adresses_popover; + GtkWidget *available_protocols_grid; GtkWidget *network_placeholder; GtkWidget *network_placeholder_label; @@ -1583,6 +1584,54 @@ unmount_cb (GtkMenuItem *item, unmount_mount (GTK_PLACES_VIEW (view), mount); } +static void +attach_protocol_row_to_grid (GtkGrid *grid, + const gchar *protocol_name, + const gchar *protocol_prefix) +{ + GtkWidget *name_label; + GtkWidget *prefix_label; + + name_label = gtk_label_new (protocol_name); + gtk_widget_set_halign (name_label, GTK_ALIGN_START); + gtk_grid_attach_next_to (grid, name_label, NULL, GTK_POS_BOTTOM, 1, 1); + + prefix_label = gtk_label_new (protocol_prefix); + gtk_widget_set_halign (prefix_label, GTK_ALIGN_START); + gtk_grid_attach_next_to (grid, prefix_label, name_label, GTK_POS_RIGHT, 1, 1); +} + +static void +populate_available_protocols_grid (GtkGrid *grid) +{ + const gchar* const *supported_protocols; + + supported_protocols = g_vfs_get_supported_uri_schemes (g_vfs_get_default ()); + + if (g_strv_contains (supported_protocols, "afp")) + attach_protocol_row_to_grid (grid, _("AppleTalk"), "afp://"); + + if (g_strv_contains (supported_protocols, "ftp")) + /* Translators: do not translate ftp:// and ftps:// */ + attach_protocol_row_to_grid (grid, _("File Transfer Protocol"), _("ftp:// or ftps://")); + + if (g_strv_contains (supported_protocols, "nfs")) + attach_protocol_row_to_grid (grid, _("Network File System"), "nfs://"); + + if (g_strv_contains (supported_protocols, "smb")) + attach_protocol_row_to_grid (grid, _("Samba"), "smb://"); + + if (g_strv_contains (supported_protocols, "ssh")) + /* Translators: do not translate sftp:// and ssh:// */ + attach_protocol_row_to_grid (grid, _("SSH File Transfer Protocol"), _("sftp:// or ssh://")); + + if (g_strv_contains (supported_protocols, "dav")) + /* Translators: do not translate dav:// and davs:// */ + attach_protocol_row_to_grid (grid, _("WebDAV"), _("dav:// or davs://")); + + gtk_widget_show_all (GTK_WIDGET (grid)); +} + /* Constructs the popup menu if needed */ static void build_popup_menu (GtkPlacesView *view, @@ -2257,6 +2306,7 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, recent_servers_stack); gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, stack); gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, server_adresses_popover); + gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, available_protocols_grid); gtk_widget_class_bind_template_callback (widget_class, on_address_entry_text_changed); gtk_widget_class_bind_template_callback (widget_class, on_address_entry_show_help_pressed); @@ -2285,6 +2335,8 @@ gtk_places_view_init (GtkPlacesView *self) gtk_widget_add_controller (GTK_WIDGET (self), controller); gtk_widget_init_template (GTK_WIDGET (self)); + + populate_available_protocols_grid (GTK_GRID (priv->available_protocols_grid)); } /* diff --git a/gtk/ui/gtkplacesview.ui b/gtk/ui/gtkplacesview.ui index 48db836e5d..93324924c4 100644 --- a/gtk/ui/gtkplacesview.ui +++ b/gtk/ui/gtkplacesview.ui @@ -61,7 +61,7 @@ - + 12 1 6 @@ -80,66 +80,6 @@ 0 - - - AppleTalk - 0 - - - 0 - 1 - - - - - File Transfer Protocol - 0 - - - 0 - 2 - - - - - Network File System - 0 - - - 0 - 3 - - - - - Samba - 0 - - - 0 - 4 - - - - - SSH File Transfer Protocol - 0 - - - 0 - 5 - - - - - WebDAV - 0 - - - 0 - 6 - - Prefix @@ -153,66 +93,6 @@ 0 - - - afp:// - 0 - - - 1 - 1 - - - - - ftp:// or ftps:// - 0 - - - 1 - 2 - - - - - nfs:// - 0 - - - 1 - 3 - - - - - smb:// - 0 - - - 1 - 4 - - - - - sftp:// or ssh:// - 0 - - - 1 - 5 - - - - - dav:// or davs:// - 0 - - - 1 - 6 - - 3 -- 2.30.2